package eu.epfc.dnet.mastermind.controller;

import eu.epfc.dnet.mastermind.model.beans.User;
import eu.epfc.dnet.mastermind.services.UserManager;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

/**
 *
 * @author Pierre Buvé
 */
@Controller
public class RegisterController {

    private UserManager userManager;

    /**
     * Injection du service usermanager
     * @param userManager 
     */
    @Autowired
    public void setUserManager(UserManager userManager) {
        this.userManager = userManager;
    }

    /**
     * Methode appellée lors de l'appel de la page register.htm via une requete de type GET
     * @param request
     * @param model
     * @return 
     */
    @RequestMapping(value = "/register.htm", method = RequestMethod.GET)
    protected ModelAndView displayRegister(HttpServletRequest request, ModelMap model) {
        if (request.getSession().getAttribute("username") != null) {
            // Si le paramètre username est stocké dans la session, demande l'affichage du bouton de déconnexion.
            String decoButton = "Déconnecter "+ request.getSession().getAttribute("username");
            model.addAttribute("decobutton",decoButton);
        }
        return new ModelAndView("register","model",model);
    }

    /**
     * Methode appellée lors de l'appel de la page register.htm via une requete de type POST
     * @param request
     * @param model
     * @return 
     */
    @RequestMapping(value = "/register.htm", method = RequestMethod.POST)
    public ModelAndView sendRegisteredToDashboard(HttpServletRequest request, ModelMap model) {
        if (request.getSession().getAttribute("username") != null) {
            // Si le paramètre username est stocké dans la session, demande l'affichage du bouton de déconnexion.
            String decoButton = "Déconnecter "+ request.getSession().getAttribute("username");
            model.addAttribute("decobutton",decoButton);
        }
        
        String login = request.getParameter("login");
        String password = request.getParameter("password");
        String email = request.getParameter("email");
        
        // Creation de l'utilisateur en mémoire
        User user = new User();
        user.setUsername(login);
        user.setPassword(password);
        user.setEmail(email);
        user.setRegisteredDate(new Date());
        System.out.println(user);
        
        model.addAttribute(user);

        // Vérification si l'utilisateur est déjà dans la db (email, login doivent etre INEXISTANT)
        String errorMessage;

        if (login.equals("")) {
            errorMessage = "[ERREUR] Le champ 'Identifiant' est requis !";
            model.addAttribute("errormessage", errorMessage);
            System.out.println(model);
            return new ModelAndView("register", "model", model);
        } else if (password.equals("")) {
            errorMessage = "[ERREUR] Le champ 'Mot de passe' est requis !";
            System.out.println(errorMessage);
            model.addAttribute("errormessage", errorMessage);
            return new ModelAndView("register", "model", model);
        } else if (email.equals("")) {
            errorMessage = "[ERREUR] Le champ 'Adresse e-mail' est requis !";
            System.out.println(errorMessage);
            model.addAttribute("errormessage", errorMessage);
            return new ModelAndView("register", "model", model);
        } else {
            if (userManager.isUsernameInDatabase(login)) {
                errorMessage = "[ERREUR] Ce nom d'utilisateur est déjà enregistré dans la base de données !";
                model.addAttribute("errormessage", errorMessage);
                return new ModelAndView("register", "model", model);
            } else if (userManager.isEmailInDatabase(email)) {
                errorMessage = "[ERREUR] Cette adresse e-mail est déjà présente dans la base de données !";
                model.addAttribute("errormessage", errorMessage);
                return new ModelAndView("register", "model", model);
            } else {
                // Enregistrement dans la DB de l'utilisateur.
                userManager.insertNewUser(user);
                model.addAttribute(user);
                String successMessage = "Compte créé avec succès : "+ user.getUsername() + " - " + user.getEmail();
                model.addAttribute("successmessage", successMessage);
                
                request.getSession().setAttribute("username",user.getUsername());
                
                return new ModelAndView("dashboard", "model", model);
            }
        }
    }
}
